#新式类写法
#经典类 class A: ; class A(): 不由任意类型派生出的类 派生类: 子类拥有父类没有的属性和方法
#新式类 class A(object): 继承object的或它子类的类 推荐使用 object 所有对象的父类 提供了内置属性和方法 通过dir()查看
#多继承
#子类可以继承多个父类 拥有多个父类的属性和方法 class A(父1,父2) 当父类有相同方法时,优先继承括号内前边的父类
#通过 对象.__mro__ 可以查看搜索方法的顺序 从左往右查找
#多态
#指同一种行为的多种表达形式 前提1继承 2重写 相当于重写了方法
#多态性 定义一个统一的接口,一个接口多个实现
class Animal(object):
    def show(self):
        print("我是动物")
class Cat(Animal): #这就是多态 show在子类与父类不一样
    def show(self):
        print("我是猫咪")
class Dog(Animal):
    def show(self):
        print("我是狗")
def test(obj): #接口 这就是多态性 好处维护时只修改接口就好了,比如不show了要eat,把接口内的show改成eat就好
    obj.show()
    # obj.eat() 在这里修改方法,就不用一个个修改外面对象的方法了
a1 = Animal()
c1 = Cat()
d1 = Dog()
test(a1)
test(c1)
test(d1)